package com.study.lu;

public class 找零钱 {

    /**
     * 有人排队 买水，一瓶水5块钱， 用户是用5快 10快  20快 买水，你要负责找零钱，假设你一开始是没有零钱的，问你是否能够找零
     * eg  【5，5，10，20】 这样是可以找零的
     * 【20，5，5】 是不可以找零的
     *
     * @param args
     */
    public static void main(String[] args) {
      //  int[] arrs = new int[]{5, 10, 20, 10, 10};
         int[] arrs = new int[]{5,10,5,5,10};

        System.out.println(找零钱1(arrs));

    }

    /**
     * 1.对于找零来说，只有5 和15有用
     * 2.对于20来找零，优先使用5快的，因为如果下一个顾客是10块钱的话，只有5块钱能找零
     *
     * @param 顾客列表
     * @return
     */
    private static boolean 找零钱1(int[] 顾客列表) {
        // 收到5快 10块的个数
        int 五块个数 = 0, 十块个数 = 0;

        for (int 顾客金额 : 顾客列表) {
            if (顾客金额 == 5) {
                五块个数++;
            } else if (顾客金额 == 10) {
                if (五块个数 > 0) {
                    五块个数--;
                    十块个数++;
                } else {
                    return false;
                }
            } else if (顾客金额 == 20) {
                // 多留个5块钱
                if (五块个数 >= 3) {
                    // 为啥这是减2是因为20-3*5=5
                    五块个数 -= 2;
                } else if (五块个数 >= 1 && 十块个数 >= 1) {
                    十块个数--;
                } else {
                    return false;
                }
            }

        }

        return true;
    }
}
